import axios from "axios";
import store from "@/store";
import router from "@/router";


// 导出基准地址 原因:其他地方不是通过axios发请求的地方
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/';
const instance = axios.create({
    baseURL,
    timeout:5000
})
// 请求拦截器
instance.interceptors.request.use(config=>{
    // 拦截的业务逻辑
    // 获取用户信息
    const {profile} = store.state.user;
    // 判断是否有token
    if (profile.token) {
        config.headers.Authorization = `Bearer ${profile.token}`
    }
    return config
},err=>{
    return Promise.reject(err)
})

// 响应拦截器 res =>res.data取出data数据
instance.interceptors.response.use(res =>res.data,err =>{
    // 401 登录无效
    if (err.response && err.response.status === 401) {
        // 清空无效信息
        // 跳转到登录页面
        // 跳转需要传参 (当前路由地址) 给登录页
        store.commit('user/setUser',{});
        // 当前路由地址: vue2
            // 组件内：$route.path \ $route.fullPath
            //  js模块:router.currentRoute.fullPath  是ref响应式数据   

        //encodeURIComponent js原生方法 转换uri编码 防止解析地址出问题 
        const fullPath = encodeURIComponent(router.currentRoute.value.fullPath);
        router.push('/login?redirectUrl='+fullPath)
    }
    return Promise.reject(err)
})

// 请求工具函数
const request = (url,method,submitData) =>{
    // 负责发请求
    return instance({
        url,
        method,
        // 如果get请求 需要使用params 来传递
        // 如果不是get请求 需要使用data来传递
        [method.toLowerCase()==='get'?'params':'data']:submitData
    })
}
export default request